//
//  TestFunction.swift
//  SwiftDeveloper
//
//  Created by 李爽 on 15/11/13.
//  Copyright (c) 2015年 Shawn Li. All rights reserved.
//  函数说明

import UIKit

class TestFunction: NSObject {
    //1，无返回值的函数
    func test(name: String) {
        
    }
    //2.返回一个返回值
    func test1(name: String) -> Bool {
        return true;
    }
    
    //3.返回由多个值组成的复合返回值
    func test2(name:String) -> (Int,Bool){
        var position = 1
        var visible = false
        return (position,visible)
    }
    
    //4.可变形参：可以接受0个或者任意数量的输入参数
    func test(numbers:Int...) -> Int{
        var count:Int = 0
        for number in numbers{
            count += number
        }
        return count
    }
    
    //5.在Swift函数中，参数默认是常量。如果要改变参数的值，就需要在定义函数的时候加上关键字var。（外部的参数任然不会被修改）
    //无法编译
//    func add(age:Int) {
//        age += 1
//    }
    
    //可以编译
    func add(var age:Int) {
        age += 1
    }
    
    //6.如果想要同时改变函数内外的参数值，可以利用inout关键字，同时调用函数的时候给参数加上前缀“&”
    func add1(inout age:Int){
        age += 1
    }
    
    //7.可以使用函数类型的参数
    func additive(a:Int, b:Int) -> Int{
        return a + b
    }
    
    //函数类型的参数
    func printAdditiveResult(addFun: (Int, Int) -> Int, a:Int, b:Int){
        println("Result:\(addFun(a,b))")
    }
    
    //8.也可以使用函数类型的返回值
    //定义个自增函数
    func increase(input:Int) -> Int{
        return input + 1
    }
    
    //定义个自减函数
    func reduce(input:Int) -> Int{
        return input - 1
    }
    
    //定义一个返回函数类型的函数
    func chooseFunction(backwards:Bool) -> (Int) -> Int{
        return backwards ? reduce : increase
    }
    

}
